/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.pharmproject.dao;


import br.com.pharmproject.bean.Endereco;
import br.com.pharmproject.bean.Produto;
import br.com.pharmproject.conexao.Conexao;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author rodrigo
 */
public class ProdutoDAO {
    
    List<Produto> produtos = null;
    Statement stm = null;
    Produto produto = null;
    
    public ProdutoDAO(){
        
        
        Conexao.getInstance();
        
        try {
            stm = Conexao.getInstance().getConector().createStatement();
            
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
    
    public Produto getById(int idProduto) throws SQLException, 
            ClassNotFoundException{
         produto = new Produto();
         
         String sql = "SELECT * FROM PRODUTO cat WHERE "
                 + "cat.ID_PRODUTO = ?";
         
         PreparedStatement pstm = Conexao.getInstance().getConector()
                 .prepareStatement(sql);
         pstm.setInt(1, idProduto);
         ResultSet rs = pstm.executeQuery();
         
         while(rs.next()){
             
             produto.setIdProduto(rs.getInt("ID_PRODUTO"));
             produto.setValor(rs.getDouble("PRECO"));
             produto.setQtProduto(rs.getInt("QTDE_ESTOQUE"));
             produto.setNoProduto(rs.getString("NOME"));
             produto.setValidade(rs.getDate("VALIDADE"));
             produto.getCategoria().setIdCategoria(rs.getInt("ID_CATEGORIA"));
             produto.getFabricante().setIdFabricante(rs
                     .getInt("ID_TIPO_FABRICANTE_PRODUTO"));
                         
         }
        
                 
         return produto;
    }
    
     public Produto insert(Produto produto) throws ClassNotFoundException, 
            SQLException{
        
        
        String sqlUpdate = "INSERT INTO PRODUTO "
              + "(PRECO, QTDE_ESTOQUE, NOME, VALIDADE, ID_CATEGORIA_PRODUTO,"
                + " ID_TIPO_FABRICANTE_PRODUTO )" + " VALUES "
              + "(?, ?, ?, ?, ?, ?)";
         
        PreparedStatement pstm = Conexao.getInstance()
                 .getConector().prepareStatement(sqlUpdate);
        pstm.setDouble(1, produto.getValor());
        pstm.setInt(2, produto.getQtProduto());
        pstm.setString(3, produto.getNoProduto());
        pstm.setDate(4, (Date) produto.getValidade());
        pstm.setInt(5, produto.getCategoria().getIdCategoria());
        pstm.setInt(6, produto.getFabricante().getIdFabricante());
        
        pstm.executeUpdate(sqlUpdate);
        
        return produto;
    }
    
    public List<Produto> getAll() throws SQLException{
        
        produtos = new ArrayList<Produto>();
                
        String sql = "SELECT * FROM PRODUTO";
        ResultSet rs = stm.executeQuery(sql);
        
        
        while(rs.next()){
            
            produto = new Produto();
           
            produto.setIdProduto(rs.getInt("ID_CIDADE"));
            produto.setValor(rs.getDouble("PRECO"));
            produto.setQtProduto(rs.getInt("QTDE_ESTOQUE"));
            produto.setNoProduto(rs.getString("NOME"));
            produto.setValidade(rs.getDate("VALIDADE"));
            produto.getCategoria().setIdCategoria(rs.getInt("ID_CATEGORIA"));
            produto.getFabricante().setIdFabricante(rs
                     .getInt("ID_TIPO_FABRICANTE_PRODUTO"));
            
            
            produtos.add(produto);
        }
        
        return produtos;
    }
    
    public void update(Produto produto) throws SQLException{
        
        
        String sqlUpdate = "UPDATE CIDADE set NOME = '" + produto.getNoProduto()
                + " WHERE ID_CLIENTE = " + produto.getIdProduto();
        
        
        stm.executeUpdate(sqlUpdate);
    }
    
    public void delete(int idProduto){
        
        String sqlDelete = "DELETE FROM PRODUTO WHERE ID_PRODUTO = ? ";
        
        PreparedStatement pstm = null;
        ResultSet rs = null;
                
        try {
            
            pstm = Conexao.getInstance().getConector().prepareStatement(sqlDelete);
            pstm.setInt(1, idProduto);
            
            pstm.executeUpdate();
                       
            
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            Conexao.getInstance().closeConnection();
        }
    }
    
}
